#include "stm32f10x.h"                  // Device header
#include "led.h"


void exti_key_Init()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//B端口外设时钟开启
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //AFIO时钟
	
	//配置GPIO
	GPIO_InitTypeDef GPIO_Initstructure;
	GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入模式，默认为高电平，所以按键一端接地，一端接IO口
	GPIO_Initstructure.GPIO_Pin=GPIO_Pin_1;//PB1
	GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_Initstructure);
	
	//AFIO配置
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);  //选择B作为外部中断源,EXTI1号中断线路
	
	//EXTI配置
	EXTI_InitTypeDef EXTI_Initstructrue;
	EXTI_Initstructrue.EXTI_Line=EXTI_Line1;//中断线路，；
	EXTI_Initstructrue.EXTI_LineCmd=ENABLE;//使能
	EXTI_Initstructrue.EXTI_Mode=EXTI_Mode_Interrupt;        //外部中断模式,分为中断和事件模式
	EXTI_Initstructrue.EXTI_Trigger=EXTI_Trigger_Falling;                  //触发信号方式 ,下降沿触发
	EXTI_Init(&EXTI_Initstructrue);
	
	
	//NVIC配置
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置抢占优先级，响应优先级的大小
	
	NVIC_InitTypeDef NVIC_Initstructrue;
	NVIC_Initstructrue.NVIC_IRQChannel=EXTI1_IRQn;//中断线路，这里需要注意EXTI5~9与EXTI10~15
	NVIC_Initstructrue.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Initstructrue.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级配置
	NVIC_Initstructrue.NVIC_IRQChannelSubPriority=1;//响应优先级配置
	NVIC_Init(&NVIC_Initstructrue);
}



